Add support for new undocumented Ozi fields (grrr) and support the
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 11 Oct 2002 13:42:29 +0000 (13:42 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 11 Oct 2002 13:42:29 +0000 (13:42 +0000)
concept of "unknown altitude" better.

gpsbabel/defs.h
gpsbabel/ozi.c

index c7b2482792fa68422d1c88d3a8d87965d2ba405f..52f39cb94630d3ba136fb9290155807fdd5d846b 100644 (file)
@@ -142,3 +142,9 @@ void be_write16(void *pp, unsigned i);
 void be_write32(void *pp, unsigned i);
 void le_write16(void *pp, unsigned i);
 void le_write32(void *pp, unsigned i);
+
+/*
+ * A constant for unknown altitude.   It's tempting to just use zero
+ * but that's not very nice for the folks near sea level.
+ */
+#define unknown_alt -99999999.0
index d04699bf78888d07e7c0592daa15e8c42dee6191..91e804f8d7d5402ae94eaecea46f5018910b3f52 100644 (file)
@@ -73,6 +73,7 @@ data_read(void)
     waypoint *wpt_tmp;
     int i;
     int linecount = 0;
+    double alt;
 
     do {
         linecount++;
@@ -140,7 +141,12 @@ data_read(void)
                    break;
                case 14:
                    /* altitude in feet */
-                   wpt_tmp->position.altitude.altitude_meters = (atof(s) * .3048);
+                   alt = atof(s);
+                   if (alt == -777) {
+                       wpt_tmp->position.altitude.altitude_meters = unknown_alt;
+                   } else {
+                       wpt_tmp->position.altitude.altitude_meters = alt * .3048;
+                   }
                    break;
                case 15:
                    /* waypoint text name size */
@@ -151,6 +157,17 @@ data_read(void)
                case 17:
                    /* symbol size - 17 default */
                    break;
+                   /* 
+                    * Fields 18-23 were added around version 3.90.4g of
+                    * Ozi, but aren't documented.   We ignore them.
+                    */
+               case 18:
+               case 19:
+               case 20:
+               case 21:
+               case 22:
+               case 23:
+                   break;
                default:
                    /* whoa! nelly */
                    fprintf (stderr, "%s: Warning: data fields on line %d exceed specification.\n", 
@@ -181,7 +198,11 @@ ozi_waypt_pr(const waypoint * wpt)
     char * shortname;
 
     ozi_time = (wpt->creation_time / 86400.0) + 25569.0;
-    alt_feet = (wpt->position.altitude.altitude_meters * 3.2808); 
+    if (wpt->position.altitude.altitude_meters == unknown_alt) {
+       alt_feet = -777;
+    } else {
+       alt_feet = (wpt->position.altitude.altitude_meters * 3.2808); 
+    }
     
     if ((! wpt->shortname) || (global_opts.synthesize_shortnames)) {
         if (wpt->description) {